﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;
using System.Configuration;

public partial class DatosCurriculum : System.Web.UI.Page
{
    private static AppSettingsReader settings = new AppSettingsReader();
    string cadena = (string)settings.GetValue("cadenaconexion", typeof(string));
    private static Curriculum curriculo = new Curriculum();
    private static bool _hayImage = false;
    private static bool _modoActualiza = false;
    private static Persona persna = new Persona();
    private static Candidato candto = new Candidato();
    private static string folio = "0"; //idpersona
    private static string idc = ""; //idcandidato
    private static int renglon = 0;
    

    protected void Page_Load(object sender, EventArgs e)
    {
        if (this.IsPostBack == false)
        {
            folio = this.Request.QueryString["id"];
            idc = this.Request.QueryString["idc"];
            Personas prsns = new Personas();
            persna = prsns.GetPersona(folio);
            candto = Candidatos.GetCandidato(idc);
            prsns = null;

            cargaDatos();
        }
    }

    private void cargaDatos()
    {
        bdSQLServer bd = new bdSQLServer ((string)settings.GetValue("cadenaconexion", typeof(string)));
        try
        {
            bd.bdConecta();
            string sql1 = "exec SPObtenCurriculum '{0}'";
            sql1 = string.Format (sql1 ,idc );
            DataSet ds = bd.dataSetConsulta(sql1, "curr");
            if (ds.Tables["curr"].Rows.Count > 0)
            {


                DataRow  dr = ds.Tables["curr"].Rows[0];
                _modoActualiza = true;
                curriculo.idcandidato = dr["idcandidato"].ToString();
                curriculo.idcurriculum = dr["idcurriculum"].ToString();
                curriculo.nombrecompleto = dr["nombrecompleto"].ToString();
                txtNombreCompleto.Text = curriculo.nombrecompleto.Trim() ;
                curriculo.expectativasprofesionales = dr["expectativasprofesionales"].ToString();
                txtExpectativas.Text = curriculo.expectativasprofesionales.Trim();
                //**Estudios
                curriculo.estudiosrealizados = dr["estudiosrealizados"].ToString();
                //**
                //*Experencia
                curriculo.experienciaprofesional = dr["experienciaprofesional"].ToString();
                //**
                //**Competencias
                curriculo.competencias = dr["competencias"].ToString();
                //txtTexto1.Text = curriculo.competencias;

                //**
                //**Habilidades
                curriculo.habilidades = dr["habilidades"].ToString();
                //txtTexto2.Text = curriculo.habilidades;
                //**
                curriculo.fechaalta = dr["fechaalta"].ToString();
                bool bActivo = bool.Parse(dr["activo"].ToString());
                if (bActivo == true)
                    curriculo.activo = "1";
                else
                    curriculo.activo = "0";

                curriculo.objetivo = dr["ObjetivoProfesional"].ToString();
                txtObjetivoProfesional.Text = curriculo.objetivo;
                curriculo.sueldo = dr["SueldoMinimoDeseado"].ToString();
                txtSueldoDeseado.Text = curriculo.sueldo;
                curriculo.habcomp = dr["HabilidadesCompu"].ToString();
                txtHabilidadesComp.Text = curriculo.habcomp;
                curriculo.disponibilidad = dr["DisponibilidadHorario"].ToString();
                txtDispHorario.Text = curriculo.disponibilidad;
            }
            else
            {
                _modoActualiza = false;
                txtNombreCompleto.Text = persna.nombre1.Trim() + " " + persna.nombre2.Trim() + " " + 
                    persna.apellido1.Trim() + " " + persna.apellido2.Trim();                
            }

            sql1 = "select idpersona from ImagenPersona where idpersona = '{0}'";
            sql1 = string.Format(sql1, folio);
            DataSet dsImagen = bd.dataSetConsulta(sql1, "imagen");

            if (dsImagen.Tables[0].Rows.Count > 0)
            {
                _hayImage = true;
                Image1.ImageUrl = "~/ShowImage.ashx?id=" + folio;
            }
            else
            {
                _hayImage = false;
            }
                        

            //Ahora cargamos los grids

            lblMensaje.Text  = string.Empty;
            CargaGrids();
        }
        catch (Exception ex)
        {
            lblMensaje.Text = ex.Message;    
        }
        finally
        {
            bd.bdCierra();
        }
        
        
    }
    protected void btnGuardar_Click(object sender, EventArgs e)
    {
        guardaCurriculum();
        if (imgUpload.FileName.Trim() != string.Empty)
        {
            guardaImagenCurriculum();
            Image1.ImageUrl = "~/ShowImage.ashx?id=" + folio;
        }
        lblMensaje.Text = "Curriculum actualizado!!!";
    }

    private void guardaCurriculum()
    {
        try
        {
            SqlConnection cnn = new SqlConnection((string)settings.GetValue("cadenaconexion", typeof(string)));
            cnn.Open();
            SqlCommand cmd = new SqlCommand();
            if (_modoActualiza == true)
                cmd = new SqlCommand("SPUpdCurriculum2", cnn);
            else
                cmd = new SqlCommand("SPInsCurriculum2", cnn);

            curriculo.competencias = ""; //txtTexto1.Text;
            curriculo.habilidades = ""; //txtTexto2.Text;
            curriculo.estudiosrealizados = " ";
            //curriculo.competencias = " ";                
            curriculo.experienciaprofesional = " ";
            curriculo.objetivo = txtObjetivoProfesional.Text.Trim();
            curriculo.sueldo = txtSueldoDeseado.Text.Trim();
            curriculo.habcomp = txtHabilidadesComp.Text.Trim();
            curriculo.disponibilidad = txtDispHorario.Text.Trim();


            cmd.CommandType = CommandType.StoredProcedure;
            SqlParameter sqlidcandidato = new SqlParameter("@idcandidato", idc);
            SqlParameter sqlnombrecompleto = new SqlParameter("@nombrecompleto", txtNombreCompleto.Text);
            SqlParameter sqlexpectativasprofesionales = new SqlParameter("@expectativasprofesionales", txtExpectativas.Text);
            SqlParameter sqlestudiosrealizados = new SqlParameter("@estudiosrealizados", curriculo.estudiosrealizados);
            SqlParameter sqlexperienciaprofesional = new SqlParameter("@experienciaprofesional", curriculo.experienciaprofesional);
            SqlParameter sqlcompetencias = new SqlParameter("@competencias", curriculo.competencias);
            SqlParameter sqlhabilidades = new SqlParameter("@habilidades", curriculo.habilidades);
            SqlParameter sqlactivo = new SqlParameter("@activo", SqlDbType.Bit);
            SqlParameter sqlobjetivos = new SqlParameter("@Objetivo", curriculo.objetivo);
            SqlParameter sqlsueldo = new SqlParameter("@Sueldo", curriculo.sueldo);
            SqlParameter sqlHabilidadesCom = new SqlParameter("@HabilidadesCom", curriculo.habcomp);
            SqlParameter sqlDisponibilidads = new SqlParameter("@Disponibilidad", curriculo.disponibilidad);

            cmd.Parameters.Add(sqlidcandidato);
            cmd.Parameters.Add(sqlnombrecompleto);
            cmd.Parameters.Add(sqlexpectativasprofesionales);
            cmd.Parameters.Add(sqlestudiosrealizados);
            cmd.Parameters.Add(sqlexperienciaprofesional);
            cmd.Parameters.Add(sqlcompetencias);
            cmd.Parameters.Add(sqlhabilidades);
            sqlactivo.Value = 1;
            cmd.Parameters.Add(sqlactivo);
            cmd.Parameters.Add(sqlobjetivos);
            cmd.Parameters.Add(sqlsueldo);
            cmd.Parameters.Add(sqlHabilidadesCom);
            cmd.Parameters.Add(sqlDisponibilidads);
            cmd.ExecuteNonQuery();
            cmd.Dispose();
            cmd = null;
            cnn.Close();
            cnn = null;

        }
        catch (Exception ex)
        {
            lblMensaje.Text = ex.Message; 
        }

    }

    private void guardaImagenCurriculum()
    {
        SqlConnection connection = null;
        try
        {
            FileUpload img = (FileUpload)imgUpload;
            Byte[] imgByte = null;
            if (img.HasFile && img.PostedFile != null)
            {
                //To create a PostedFile
                HttpPostedFile File = imgUpload.PostedFile;
                //Create byte Array with file len
                imgByte = new Byte[File.ContentLength];
                //force the control to load data in array
                File.InputStream.Read(imgByte, 0, File.ContentLength);
            }
            // Insert the employee name and image into db

            connection = new SqlConnection(cadena);

            connection.Open();
            string sql = "";
            if (_hayImage)
                sql = "UPDATE ImagenPersona set imagen = @foto where idpersona = @idpersona";
            else
                sql = "INSERT INTO ImagenPersona (idpersona,imagen ) VALUES (@idpersona,@foto)";

            SqlCommand cmd = new SqlCommand(sql, connection);
            cmd.Parameters.AddWithValue("@idpersona", folio);
            cmd.Parameters.AddWithValue("@foto", imgByte);
            int id = Convert.ToInt32(cmd.ExecuteScalar());

            _hayImage = true;

        }
        catch (Exception ex)
        {
            lblMensaje.Text = ex.Message; 
        }
        finally
        {
            connection.Close();
        }
    }

    private void CargaGrids()
    {
        bdSQLServer bd = new bdSQLServer((string)settings.GetValue("cadenaconexion", typeof(string)));
        string strSQL = "";
        string strSQLFinal = "";
        try
        {
            strSQL += "select Renglon,Escuela,Carrera,Titulo,anos ";
            strSQL += "from estudios ";
            strSQL += "where idcandidato = '{0}'";
            strSQL += "order by renglon asc; ";
            strSQL += "select Renglon,Empresa,anos,Responsabilidades,isnull(puesto,'') as puesto,isnull(de,'') as de,isnull(hasta,'') as hasta ";
            strSQL += "from Experiencia  ";
            strSQL += "where idcandidato = '{0}' ";
            strSQL += "order by renglon asc; ";
            strSQL += "select idcandidato,curso,anocurso,renglon, isnull(institucion,'') as institucion ";
            strSQL += "from cursoscurri ";
            strSQL += "where idcandidato = '{0}' ";
            strSQL += "select idcandidato,idioma,renglon, isnull(porcentaje,'') as porcentaje ";
            strSQL += "from idiomacurri ";
            strSQL += "where idcandidato = '{0}' ";


            strSQLFinal = string.Format(strSQL, idc);

            bd.bdConecta();

            DataSet ds = bd.dataSetConsulta(strSQLFinal, "datos");

            dgEstudios.DataSource = ds.Tables[0].DefaultView;
            dgExperiencias.DataSource = ds.Tables[1].DefaultView;
            grdCursos.DataSource = ds.Tables[2].DefaultView;
            grdIdioma.DataSource = ds.Tables[3].DefaultView;
            dgEstudios.DataBind();
            dgExperiencias.DataBind();
            grdCursos.DataBind();
            grdIdioma.DataBind();

        }
        catch (Exception ex)
        {
            lblMensaje.Text = ex.Message; 
        }

        finally
        {
            bd.bdCierra();
        }
    }

    protected void dgEstudios_SelectedIndexChanged(object sender, EventArgs e)
    {        
        renglon = int.Parse(dgEstudios.SelectedValue.ToString());
        Escuela.Text = dgEstudios.Rows[dgEstudios.SelectedIndex].Cells[1].Text;
        Carrera.Text = dgEstudios.Rows[dgEstudios.SelectedIndex].Cells[2].Text;
        Titulo.Text = dgEstudios.Rows[dgEstudios.SelectedIndex].Cells[3].Text;
        anos.Text = dgEstudios.Rows[dgEstudios.SelectedIndex].Cells[4].Text;
        menos(1);
    }

    private void agregar(int info)
    {
        string SQLBase = "";
        string SQLFinal = "";
        string SQL = "";
        try
        {

            renglon = 0;
                
                    switch (info)
                    {
                        case 1:
                            
                            SQL = string.Format("select max(renglon) + 1 as renglon from Estudios where idcandidato = '{0}'", idc);
                            renglon = calculaRenglonSiguiente(SQL);
                            SQLBase = "exec SPInsEstudios '{0}','{1}','{2}','{3}','{4}',{5}";
                            SQLFinal = string.Format(SQLBase, idc, Escuela.Text, Carrera.Text, Titulo.Text,anos.Text, renglon);
                            Escuela.Text = string.Empty;
                            Carrera.Text = string.Empty;
                            Titulo.Text = string.Empty;
                            anos.Text = string.Empty;
                            break;
                        case 2:                            
                            SQL = string.Format("select max(renglon) + 1 as renglon from Experiencia where idcandidato = '{0}'", idc);
                            renglon = calculaRenglonSiguiente(SQL);
                            SQLBase = "exec SPInsExperiencia2 '{0}','{1}','{2}','{3}','{4}','{5}','{6}',{7}";
                            SQLFinal = string.Format(SQLBase, idc, empresa.Text, 
                                " ", Responsabilidades.Text, txtPuesto.Text.Trim(),
                                txtDe.Text.Trim(),txtHasta.Text.Trim(),renglon);
                            empresa.Text = string.Empty;
                            //AnosEmpresa.Text = string.Empty;
                            Responsabilidades.Text = string.Empty;
                            txtPuesto.Text = string.Empty;
                            txtDe.Text = string.Empty;
                            txtHasta.Text = string.Empty;
                            break;
                        case 3:
                            SQL = string.Format("select max(renglon) + 1 as renglon from cursoscurri where idcandidato = '{0}'", idc);
                            renglon = calculaRenglonSiguiente(SQL);
                            SQLBase = "exec SPInsCursoCurri '{0}','{1}','{2}','{3}',{4}";
                            SQLFinal = string.Format(SQLBase, idc, txtCurso.Text,
                                txtAnoCurso.Text,txtInstitucion.Text, renglon);
                            txtCurso.Text = string.Empty;
                            txtAnoCurso.Text = string.Empty;
                            txtInstitucion.Text = string.Empty;
                            break;
                        case 4:
                            SQL = string.Format("select max(renglon) + 1 as renglon from idiomacurri where idcandidato = '{0}'", idc);
                            renglon = calculaRenglonSiguiente(SQL);
                            SQLBase = "exec SPInsIdiomaCurri '{0}','{1}','{2}',{3}";
                            SQLFinal = string.Format(SQLBase, idc, txtIdioma.Text,txtPorcentaje.Text,
                                 renglon);
                            txtIdioma.Text = string.Empty;
                            txtPorcentaje.Text = string.Empty;
                            break;
                        default:
                            break;

                    }
                    ejecutaStore(SQLFinal);
                    
                    CargaGrids();


        }
        catch (Exception ex)
        {
            lblMensaje.Text = ex.Message; 
        }
    }

    private int calculaRenglonSiguiente(string SQL)
    {
        bdSQLServer bd = new bdSQLServer((string)settings.GetValue("cadenaconexion", typeof(string)));
        DataTable dt;

        int renglon = 0;
        try
        {
            bd.bdConecta();
            dt = bd.dataSetConsulta(SQL, "tabla").Tables[0];
            if (dt.Rows.Count > 0)
            {
                if (dt.Rows[0][0] != DBNull.Value)
                    renglon = int.Parse(dt.Rows[0][0].ToString());
                else
                    renglon = 1;
            }

        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
        finally
        {
            bd.bdCierra();
        }
        return renglon;
    }

    private void menos(int info)
    {
        try
        {
            if (renglon > 0)
            {
                string SQL = "";
                string SQLFinal = "";
                switch (info)
                {
                    case 1:
                        SQL = "exec SPDltEstudios '{0}',{1}";
                        break;
                    case 2:
                        SQL = "exec SPDltExperiencia '{0}',{1}";
                        break;
                    case 3:
                        SQL = "exec SPDltCursoCurri '{0}',{1}";
                        break;
                    case 4:
                        SQL = "exec SPDltIdiomaCurri '{0}',{1}";
                        break;
                    default:
                        break;
                }
                SQLFinal = string.Format(SQL, idc, renglon);
                ejecutaStore(SQLFinal);
                CargaGrids();
            }
        }
        catch (Exception ex)
        {
            lblMensaje.Text = ex.Message; 
        }
    }

    private void ejecutaStore(string SQL)
    {
        bdSQLServer bd = new bdSQLServer((string)settings.GetValue("cadenaconexion", typeof(string)));
        try
        {
            bd.bdConecta();

            int iEjecuta = 0;
            iEjecuta = bd.bdEjecuta(SQL);

        }
        catch (Exception ex)
        {
            lblMensaje.Text = ex.Message; 
        }
        finally
        {
            bd.bdCierra();
        }
    }

    protected void dgExperiencias_SelectedIndexChanged(object sender, EventArgs e)
    {
        renglon = int.Parse(dgExperiencias.SelectedValue.ToString());
        empresa.Text = dgExperiencias.Rows[dgExperiencias.SelectedIndex].Cells[1].Text;
        //AnosEmpresa.Text = dgExperiencias.Rows[dgExperiencias.SelectedIndex].Cells[2].Text;
        Responsabilidades.Text = dgExperiencias.Rows[dgExperiencias.SelectedIndex].Cells[2].Text;
        txtPuesto.Text = dgExperiencias.Rows[dgExperiencias.SelectedIndex].Cells[3].Text;
        txtDe.Text = dgExperiencias.Rows[dgExperiencias.SelectedIndex].Cells[4].Text;
        txtHasta.Text = dgExperiencias.Rows[dgExperiencias.SelectedIndex].Cells[5].Text;
        menos(2);
    }
    protected void btnAgregar1_Click(object sender, EventArgs e)
    {
        try
        {
            agregar(1);        
        }
        catch
        {           
            
        }
        
    }
    protected void btnAgregar2_Click(object sender, EventArgs e)
    {
        try
        {
            agregar(2);
        }
        catch
        {
            
        }
        
    }
    protected void btnAgregar3_Click(object sender, EventArgs e)
    {
        try
        {
            agregar(3);
        }
        catch
        {

        }
    }
    protected void btnAgregar4_Click(object sender, EventArgs e)
    {
        try
        {
            agregar(4);
        }
        catch
        {

        }
    }
    protected void grdCursos_SelectedIndexChanged(object sender, EventArgs e)
    {
        renglon = int.Parse(grdCursos.SelectedValue.ToString());
        txtCurso.Text = grdCursos.Rows[grdCursos.SelectedIndex].Cells[1].Text;
        txtAnoCurso.Text = grdCursos.Rows[grdCursos.SelectedIndex].Cells[2].Text;
        txtInstitucion.Text = grdCursos.Rows[grdCursos.SelectedIndex].Cells[3].Text;   
        menos(3);
    }
    protected void grdIdioma_SelectedIndexChanged(object sender, EventArgs e)
    {
        renglon = int.Parse(grdIdioma.SelectedValue.ToString());
        txtIdioma.Text = grdIdioma.Rows[grdIdioma.SelectedIndex].Cells[1].Text;
        txtPorcentaje.Text = grdIdioma.Rows[grdIdioma.SelectedIndex].Cells[2].Text;       
        menos(4);
    }
}